#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//int main()
//{
//
//
//    int a;
//    scanf("%d", &a);
//    if (a % 5 == 0) {
//        printf("YES");
//
//    }
//    else {
//        printf("NO");
//
//    }
//    return 0;
//
//}
//int main()
//{
//	printf("请输入年龄\n");
//	int age=0;
//	scanf("%d", &age);
//	if (age >= 18)
//		printf("已成年");
//	else
//		printf("未成年");


	

//	return 0;
//}
//判断一个数是0还是正数还是负数

//int main()
//{
//	printf("请输入一个数\n");
//	int a = 0;
//	scanf("%d", &a);
//	if (a == 0)
//		printf("a是正数");
//	else if (a < 0)
//			printf("a是负数");
//		else
//			printf("a是正数");
//
//	
//	return 0;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	if (a < 18)
//		printf("少年");
//	else if ( a >= and<=44)
//		printf("青年");
//	else if (59 >= a >= 45)
//		printf("中老年");
//	else if (89 >= a >= 60)
//		printf("老年");
//	else
//		printf("老寿星");
//	return 0;
//}
//int main()
//{
//    int a = 0, b = 0, m = 0;
//    scanf("%d%d", a, b);
//    m = a > b ? 2 : 3;
//    printf("%d", m);
//    return 0;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	switch (n)
//	{
//	case 1:
//		printf("星期一");
//		break;
//	case 2:
//		printf("星期二");
//		break;
//	case 3:
//		printf("星期四");
//		break;
//	}
//
//	return 0;
//}
//int main()
//{
//	int a = 1;
//	while (a<=10)
//	{
//		printf("%d", a);
//		a++;
//	}
//		return 0;
//}
//int main()
//{
//	int a = 0, b = 0;
//	scanf("%d%d", &a,&b);
//	if (a > b)
//		printf("%d>%d", a, b);
//	else
//		printf("%d>%d", b, a);
//	return 0;
//}
//1~100之间3的倍数之和
//int main()
//{
//	int i = 0;
//	int m = 0;
//	for (i = 1; i <= 100; i *= 3)
//		//printf("%d", i);
//	     m = m + i;
//	printf("%d", m);
//	return 0;
//}
//int main()
//{
//	int i = 0;
//	int m = 0;
//	for (i = 1; i <= 100; i++)
//	{
//		if (i % 3 == 0)
//			m = m + i;
//
//	}
//	printf("%d", m);
//
//	return 0;
//}
//int main()
//{
//	int i = 1;
//	do
//	{
//		
//		printf("%d", i);
//		i++;
//	}
//
//		while (i <= 10);
//		
//	return 0;
//}
//int main()
//{
//	printf("你好");
//	return 0;
//}
//#include <math.h>
//int main()
//{
//	double s = sqrt(16);
//	printf("%lf", s);
//
//	return 0;
//}
//自定义函数的实现

//int Add(int x, int y)//有返回类型，函数名，参数类型
//{
//	return(x + y);//函数体，要有返回值
//}
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	int c = Add(a, b);//实现函数的调用
//	printf("%d", c);
//
//
//	return 0;
//}

//
//void Print()//void 表示不需要返回类型（）什么都不放表示不需要任何参数，可以加void，表示明确不需要参数
//{
//	printf("呵呵\n");
//}
//int main()
//{
//	Print();
//	return 0;
//}


//实现一个函数求较大值

//double better(double x, double y)
//{
//	return(x > y ? x : y);
//}
//int main()
//{
//	double a = 0;
//	double b = 0;
//	scanf("%lf %lf", &a, &b);
//	double c = better(a,b);
//	printf("%lf", c);
//	return 0;
//}

//判断是奇数还是偶数
//int  is_odd(int x)
//{
//	if (x % 2 == 1)
//		return(0);
//	else
//		return(-1);
//}
//

//return 后面跟数值的情况
//int  is_odd(int x)
//{
//	return x % 2;//余1为真余0为假,为真返回1为假返回0
//}
//
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int b = is_odd(a);
//	if (b == 1)
//		printf("是奇数");
//	else
//		printf("是偶数");
//	
//	return 0;
//}


//return 后面什么不跟的情况

//void test(int x)
//{
//	if (x <= 0)
//		return;
//	else
//		for (int i = 1; i <= x; i++)
//			printf("%d ", i);
//}

//分支语句，要保证每一种情况下都要有return返回值，不然会出错

//int test()
//{
//	int a = 0;
//	scanf("%d",&a);
//	if(a<4)
//		return 1;
// }
//int main()
//{
//	int r =test();
//	printf("%d", r);
//	return 0;
//}


//数组作为传参
//一维数组

//void set_arr(int arr[10],int sz)
//{
//	for (int i = 0; i < sz; i++)
//		arr[i] = 0;
//}
//
//void print(int arr[10], int sz)
//{
//	
//		for (int i = 0; i <sz; i++)
//		printf("%d", arr[i]);
//	printf("\n");
//}
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	set_arr(arr, sz);
//	print(arr, sz);
//	return 0;
//}

//二维数组

//void print(int arr[3][5], int x, int y)
//{
//	for (int i = 0; i < x; i++)
//	{
//		for (int j = 0; j < y; j++)
//		{
//			printf("%d ", arr[i][j]);
//		}
//		printf("\n");
//	}
//}
//
//int main()
//{
//	int arr[3][5] = { {1,2,3,4,5},{0,1,2,3,4},{4,5,6,7,8} };
//	print(arr, 3, 5);
//	return 0;
//}


//函数之间的相互调用
//某年某月有多少天

//int is_leap_year(int year)
//{
//	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
//		return 1;
//	else
//		return 0;
//}
//
//
//int  day_of_month(int x, int y)
//{
//	int days[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//	
//	int r = is_leap_year(x);
//	if (r == 1 )
//		days[2] += 1;
//	printf("%d", days[y]);
//
//	return 0;
//} 
//
//
//int main()
//{
//	int year = 0;
//	int month = 0;
//	scanf("%d %d", &year, &month);
//	 day_of_month(year, month);
//	return 0;
//}
//函数在使用前先要定义或者声明，意思是再告诉编译器，函数类型是什么，名字是什么，返回值是什么
//定义是特殊的声明


//多个文件的函数的调用，写函数声明放在头文件和函数定义创建一个新的.c文件
//在你需要的文件里面去调用就可以
//这样会大大减小一个文件里面的代码数量
 

//加法多个文件的调用
#include "Add.h"//自己创建的函数用引号就可以了，头文件包含就相当于函数的声明
#pragma comment(lib,"Add.lib")//导入静态库
//可以没有头文件，但也同样需要声明
//int main()
//{
//	int a = 0;
//	int b = 0;
//	scanf("%d %d", &a, &b);
//	int c = Add(a, b);
//	printf("%d", c);
//	return 0;
//}
//分开写，形成静态库，可以隐藏一些代码让别人看不到，保护自己的代码



//static（静态）和extern
//详细内容看板书和课件


//static修饰局部变量
//void test()
//{
//	static int a = 2;
//	a++;
//	printf("%d\n", a);
//}
//
//int main()
//{
//	for (int i = 1; i <= 5; i++)
//	{
//		test();
//	}
//	return 0;
//}


//全局变量跨文件使用
//跨文件使用需要先声明
//全局变量具有外部链接属性，但被static修饰后，就变成内部链接属性，
// 只能在自己的文件里面使用，其他.c文件不能使用，这样全局变量就会更安全
//修饰函数的也是一样的道理，函数也是具有外部链接属性

//extern int a;//extern可以省略
//int main()
//{
//	printf("%d", a);
//	return 0;
//}


//函数递归
//输入1234 打印 1 2 3 4
//第一种方法
 
//void print(int x)
//{
//	int arr[10] = { 0 };//创建一个数组用于存放算出来的值
//	int i = 0;
//	while (x)
//	{
//		arr[i++] = x % 10;
//		x = x / 10;
//
//		}
//	for (int j = 3;j>=0; j--)//逆着打印数组的内容
//	{
//		printf("%d ", arr[j]);
//	}
//}
//
//
//int  main()
//{
//	int n = 0; 
//	scanf("%d", &n);
//	print(n);
//	return 0;
//
//}

//  第二种运用函数递归
//void print(int n)
//{
//	if (n > 9)//递归限制条件
//		print(n/10);
//	printf("%d", n % 10);
//
// }
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	print(n);	
//	return 0;
//}

//利用递归函数求递n个斐波那契数
//斐波那契数列 前两个数加起来等于第后面一个数

//int fbn(int a)
//{
//	if (a <= 2)
//		return 1;
//	else
//		return fbn(a - 1) + fbn(a - 2);
//	
//}
//
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int r=fbn(a);
//	printf("%d", r);
//	return 0;
//}

//用迭代的方式计算递n个斐波那契数

//void fbn(int n)
//{
//	int a = 1;
//	int b = 1;
//	long long int c = 1;
//	while (n>=3)
//	{
//		c = a + b;
//		a = b;
//		b = c;
//		n--;
//	}
//	printf("%d", c);
//
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	fbn(n);
//	return 0;
//}
// 递归耗费占空间 效率低 ，迭代效率会更快，递归虽好，但要适合用


int main()
{
    int a = 1, b = 1;
    int c = 0;
    int n = 0;
    scanf("%d", &n);
    while (n >= 3)
    {
        c = a + b;
        a = b;
        b = c;
        n--;
        printf("%d", c);
    }
    while (n < 3)
    {
        printf("%d ",c);
    }
    return 0;
}
//
//int main()
//{
//	printf("你好");
//	return 0;
//}